import UIKit

/**
    B站：https://www.bilibili.com/video/BV144411C7Gg?p=46

    第46课 尾随闭包 (3/4种写法)
 */


// ------------- 【 1 】 ----------------

func play(param1: String, param2: (String) -> Void) {
    param2(param1 + " - Swift")
}

// 1. 完整写法
play(param1: "1-1 hello", param2: {(data) -> Void in
    print(data)
})

// 2. Xcode 推荐写法
play(param1: "1-2 world") { (data) in
    print(data)
}

// 3.
play(param1: "1-3 say talk") { (data) -> () in
    print(data)
}

// 4.
play(param1: "1-4 see look") { (data) -> Void in
    print(data)
}

// ------------- 【 2 】 ----------------

func play22(param: (String) -> String) {
    let value = param("swift")
    print("返回值 = " + value)
}

// 1. 完整写法
play22(param: {(data) -> String in
    return data + "- ios 2-1"
})

// 2. Xcode 推荐写法
play22 { (data) -> String in
    return data + "- maxos 2-2"
}

// 3. (仅有一个闭包参数写法的)
play22() { (p) -> String in
    return p + "- maxos 2-3"
}


// ------------- 【 3 】 ----------------

func play33(param: () -> Void) {
    param()
}

// 1. 完整写法
play33(param: {() -> Void in
    print(" hello 3-1")
})

// 2. Xcode 推荐写法
play33 {
    print(" hello 3-2")
}

// 3. (仅有一个闭包参数写法的)
play33() {
    print(" hello 3-3")
}


// 4 (仅有一个闭包参数，没有返回值的)
play33(param: {
    print(" hello 3-4")
})



// ----------------------------------------------------
// ****** 下面不是 尾随闭包 方法 *********8
func sound(parma1: (Int) -> Void, param2: Int) {
    parma1(param2 * 2)
}

// 闭包采用简写方式 : 1-2 、 2-2
sound(parma1: { (d) in
    print("不是尾随闭包 sound =", d)
}, param2: 10)
